//package com.tdcoding.chat.helper;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import com.fasterxml.jackson.core.JsonGenerationException;
//import com.fasterxml.jackson.core.JsonParseException;
//import com.fasterxml.jackson.core.JsonParser.Feature;
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.DeserializationFeature;
//import com.fasterxml.jackson.databind.JsonMappingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//
//public class JJsonHelper {
//	private static final String TAG = "JJsonHelper";
//	private static ObjectMapper objectMapper;
//
//	static {
//		objectMapper = new ObjectMapper();
//		// objectMapper.configure(MapperFeature.USE_ANNOTATIONS ,
//		// true);//确定是否用于注释自省配置;如果启用,将使用配置AnnotationIntrospector:如果禁用,没有注释。
//		// objectMapper.configure(Feature.ALLOW_COMMENTS ,
//		// true);//确定解析器将允许使用Java / c++风格的注释(‘/’+‘*’和‘/ /’品种)在解析内容
//		objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);// 确定解析器将允许使用单引号(撇号,字符“\”)引用的字符串(名称和字符串值)。
//		objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
//		objectMapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);// 确定解析器将允许JSON字符串包含非挂牌控制字符(ASCII字符值小于32,包括选项卡并换行字符)。
//		objectMapper.configure(Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);// 可以启用接受引用的字符使用反斜杠qooting机制:如果没有启用,只有明确列出的字符JSON规范可以因此逃脱(见JSON规范小列表,这些字符)
//
//		objectMapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, true);
//		objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);// 可以启用允许JSON空字符串值("
//																								// ")绑定到pojo为null。
//		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 决定是否遇到未知的属性(那些不映射到属性,并没有“任何setter”或处理程序可以处理它)会导致失败(扔JsonMappingException)。
//		objectMapper.configure(DeserializationFeature.WRAP_EXCEPTIONS, true);// 特性,确定杰克逊的代码应该捕获和包装异常(但不要错误!)添加额外的位置信息(输入)的问题。
//	}
//
//	public static <T> T toObject(String json, Class<T> clazz) {
//		try {
//			return objectMapper.readValue(json, clazz);
//		} catch (JsonParseException e) {
//			Logger.println(TAG, "toObject", e.getMessage());
//		} catch (JsonMappingException e) {
//			Logger.println(TAG, "toObject", e.getMessage(), e);
//		} catch (IOException e) {
//			Logger.println(TAG, "toObject", e.getMessage(), e);
//		}
//		return null;
//	}
//
//	public static <T> String toJson(T entity) {
//		try {
//			return objectMapper.writeValueAsString(entity);
//		} catch (JsonGenerationException e) {
//			Logger.println(TAG, "toJson", e.getMessage(), e);
//		} catch (JsonMappingException e) {
//			Logger.println(TAG, "toJson", e.getMessage(), e);
//		} catch (IOException e) {
//			Logger.println(TAG, "toJson", e.getMessage(), e);
//		}
//		return null;
//	}
//
//	public static <T> T toCollection(String json, TypeReference<T> typeReference) {
//		try {
//			return objectMapper.readValue(json, typeReference);
//		} catch (JsonParseException e) {
//			Logger.println(TAG, "toCollection", e.getMessage(), e);
//		} catch (JsonMappingException e) {
//			Logger.println(TAG, "toCollection", e.getMessage(), e);
//		} catch (IOException e) {
//			Logger.println(TAG, "toCollection", e.getMessage(), e);
//		}
//		return null;
//	}
//
//	/**
//	 * json string convert to map
//	 */
//	@SuppressWarnings("unchecked")
//	public static <T> Map<String, Object> json2map(String jsonStr) throws Exception {
//		return objectMapper.readValue(jsonStr, Map.class);
//	}
//
//	/**
//	 * json string convert to map with javaBean
//	 */
//	public static <T> Map<String, T> json2map(String jsonStr, Class<T> clazz) throws Exception {
//		Map<String, Map<String, Object>> map = objectMapper.readValue(jsonStr, new TypeReference<Map<String, T>>() {
//		});
//		Map<String, T> result = new HashMap<String, T>();
//		for (Map.Entry<String, Map<String, Object>> entry : map.entrySet()) {
//			result.put(entry.getKey(), map2Pojo(entry.getValue(), clazz));
//		}
//		return result;
//	}
//
//	/**
//	 * json array string convert to list with javaBean
//	 */
//	public static <T> List<T> json2list(String jsonArrayStr, Class<T> clazz) throws Exception {
//		List<Map<String, Object>> list = objectMapper.readValue(jsonArrayStr, new TypeReference<List<T>>() {
//		});
//		List<T> result = new ArrayList<T>();
//		for (Map<String, Object> map : list) {
//			result.add(map2Pojo(map, clazz));
//		}
//		return result;
//	}
//
//	/**
//	 * map convert to javaBean
//	 */
//	public static <T> T map2Pojo(Map<String, Object> map, Class<T> clazz) {
//		return objectMapper.convertValue(map, clazz);
//	}
//
//	public static void destory() {
//		// if (jsonGenerator != null) {
//		// jsonGenerator.flush();
//		// }
//		// if (!jsonGenerator.isClosed()) {
//		// jsonGenerator.close();
//		// }
//		// jsonGenerator = null;
//		objectMapper = null;
//		System.gc();
//	}
//
//}
